package com.skyeye;

import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import static org.junit.Assert.*;

/**
 * 使用配置文件的MySQL连接测试类
 * 这个测试类从配置文件读取数据库连接参数
 */
public class MySQLConnectionWithConfigTest {

    private Properties properties;

    /**
     * 从配置文件加载数据库连接参数
     */
    private void loadDatabaseConfig() throws IOException {
        properties = new Properties();
        InputStream inputStream = getClass().getClassLoader()
                .getResourceAsStream("database.properties");
        
        if (inputStream == null) {
            throw new IOException("无法找到database.properties配置文件");
        }
        
        properties.load(inputStream);
        inputStream.close();
    }

    /**
     * 测试从配置文件读取数据库连接
     */
    @Test
    public void testMySQLConnectionWithConfig() {
        Connection connection = null;
        
        try {
            // 加载配置文件
            loadDatabaseConfig();
            
            // 从配置文件获取连接参数
            String url = properties.getProperty("db.url");
            String username = properties.getProperty("db.username");
            String password = properties.getProperty("db.password");
            String driver = properties.getProperty("db.driver");
            
            // 验证配置参数
            assertNotNull("数据库URL不应该为null", url);
            assertNotNull("用户名不应该为null", username);
            assertNotNull("密码不应该为null", password);
            assertNotNull("驱动类名不应该为null", driver);
            
            // 加载数据库驱动
            Class.forName(driver);
            
            // 建立数据库连接
            connection = DriverManager.getConnection(url, username, password);
            
            // 验证连接是否成功
            assertNotNull("数据库连接不应该为null", connection);
            assertFalse("数据库连接应该是有效的", connection.isClosed());
            
            System.out.println("✅ 使用配置文件的MySQL连接测试成功！");
            System.out.println("连接URL: " + url);
            System.out.println("用户名: " + username);
            System.out.println("驱动类: " + driver);
            
        } catch (IOException e) {
            fail("读取配置文件失败: " + e.getMessage());
        } catch (ClassNotFoundException e) {
            fail("数据库驱动未找到: " + e.getMessage());
        } catch (SQLException e) {
            fail("数据库连接失败: " + e.getMessage());
        } finally {
            // 关闭数据库连接
            if (connection != null) {
                try {
                    connection.close();
                    System.out.println("数据库连接已关闭");
                } catch (SQLException e) {
                    System.err.println("关闭数据库连接时出错: " + e.getMessage());
                }
            }
        }
    }

    /**
     * 测试配置文件加载
     */
    @Test
    public void testConfigFileLoading() {
        try {
            loadDatabaseConfig();
            
            // 验证所有必需的配置项都存在
            assertTrue("配置文件中应该包含db.url", properties.containsKey("db.url"));
            assertTrue("配置文件中应该包含db.username", properties.containsKey("db.username"));
            assertTrue("配置文件中应该包含db.password", properties.containsKey("db.password"));
            assertTrue("配置文件中应该包含db.driver", properties.containsKey("db.driver"));
            
            System.out.println("✅ 配置文件加载测试成功！");
            System.out.println("配置项数量: " + properties.size());
            
        } catch (IOException e) {
            fail("配置文件加载失败: " + e.getMessage());
        }
    }
}
